package domain;

import java.util.ArrayList;
import java.util.List;

import utils.StringUtils;
import utils.StringUtils.MyStringBuffer;

public class element {

	private List<AttributeProvider> list_attr = new ArrayList<AttributeProvider>();

	private List<Object> list_child = new ArrayList<Object>();;
	
	public element() {
	}
	
	public element(Object child) {
		this.addChild(child);
	}
	
	public element addAttribue(AttributeProvider ap){
		this.list_attr.add(ap);
		return this;
	}
	
	
	public element addChild(Object child){
		list_child.add(child);
		return this;
	}
	
	
	/**
	 * just list the child
	 * @return
	 */
	public String getInnerHTML(){
		MyStringBuffer msb = StringUtils.getNewMyStringBuffer();
		for(Object child : list_child){
			msb.put(child);
		}
		return msb.getStringAndClose();
	}
	/**
	 * just give the simple class name
	 * @return
	 */
	public String thisElementName(){
		return this.getClass().getSimpleName();
	}
	
	@Override
	public String toString() {
		MyStringBuffer msb = StringUtils.getNewMyStringBuffer();
		msb.add("<").add(thisElementName()).add(" ");
		
		// add attribute
		for(AttributeProvider ap : list_attr){
			msb.add(ap.getName()).add("=").add("\"");
			msb.add(ap.getValue()).add("\"");
			msb.add(" ");
		}
		msb.popLast();
		
		
		msb.add(">");
		msb.add(getInnerHTML());
		msb.add("</").add(thisElementName()).add(">");
		return msb.getStringAndClose();
	}

}
